//designpatterns.command.XMLUtil.java
package org.patterns.behavior.command;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

public class XMLUtil {
    //该方法用于从XML配置文件中提取具体类类名，并返回一个实例对象，可以通过参数的不同返回不同类名节点所对应的实例
    public static Object getBean(int i) {
        try {
            // 获取文件的URL
            URL url = XMLUtil.class.getResource("config.xml");
            String filePath = url.getFile();
            System.out.println("文件URL: " + URLDecoder.decode(filePath, StandardCharsets.UTF_8));
            //创建文档对象
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dFactory.newDocumentBuilder();
            Document doc;
            doc = builder.parse(filePath);

            //获取包含类名的文本节点
            NodeList nodes = doc.getElementsByTagName("className");
            Node classNode = null;
            if (0 == i) {
                classNode = nodes.item(0).getFirstChild();
            } else {
                classNode = nodes.item(1).getFirstChild();
            }

            String cName = classNode.getNodeValue();

            // Class clazz = Class.forName(cName);
            // Object obj = clazz.newInstance();
            // 通过类名生成实例对象并将其返回
            Class<?> clazz = Class.forName(cName);
            Object obj = clazz.getDeclaredConstructor().newInstance();
            return obj;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}